//
//  Random.swift
//  CommandLineTool1
//
//  Created by May on 2025/3/26.
//

import Foundation

class Random {
    
    // 随机-等概率：在给出范围内概率相同
    func note () {
        // [0,1) 范围内的随机数
        let _ = Double.random(in: 0..<1)
        // [0,8) 范围内的随机数
        let _ = Double.random(in: 0..<1) * 8
        // [0,100) 随机整数
        let _ = Int.random(in: 0..<100)
    }
    
    /// 题目：概率 从 x 改到 x²
    /// for x in [0, 1),  probability of x to x²
    /// 两次都落到 0-x 才有效，如果一次或者两次大于x了，整体就不在0-x了
    static func xToxPower2() -> Double {
//        pow(1, 2)
        return max(Double.random(in: 0..<1), Double.random(in: 0..<1))
    }
    
    
    // 题目：用3-19发生器(黑盒) 生成 20-56发生器
    // 1.已知发生器改造成 0-1等概率发生器
    // 2.用0-1等概率发生器随机目标范围二进制的每一位
    static func r3TOr19() -> Int {
        return Int.random(in: 3..<20)
    }
    static func r20TOr56() -> Int {
        return 1
    }
    
    
    
    static func test() {
        let testTimes = 1000000
        var count = 0
        let target = 0.7
        
        for _ in 0...testTimes {
            
            // 落在 0~0.7 的概率
//            let x = Double.random(in: 0..<1)
            
            // 落在 x² 的概率
            let x = xToxPower2()
            if x < target {
                count += 1
            }
        }
        print(pow(target, 2))
        print(Float(count) / Float(testTimes))
    }
}
